"""
Python 推导式
Python 推导式是一种独特的数据处理方式，可以从一个数据序列构建另一个新的数据序列的结构体。
Python 推导式是一种强大且简洁的语法，适用于生成列表、字典、集合和生成器。
在使用推导式时，需要注意可读性，尽量保持表达式简洁，以免影响代码的可读性和可维护性。
Python 支持各种数据结构的推导式：
列表(list)推导式
字典(dict)推导式
集合(set)推导式
元组(tuple)推导式
"""


def tds_list():
    """
    [表达式 for 变量 in 列表]
    [out_exp_res for out_exp in input_list]
    或者
    [表达式 for 变量 in 列表 if 条件]
    [out_exp_res for out_exp in input_list if condition]
    """
    names = ['Bob', 'Tom', 'alice', 'Jerry', 'Wendy', 'Smith']
    new_names = [name.upper() for name in names if len(name) > 3]
    # list =  [表达式 for 变量 in 列表]
    list_1 = [na.lower() for na in names]
    print(new_names)
    print(list_1)
    mul = [i for i in range(30) if i % 3 == 0]
    print(mul)


def tds_dict():
    """
    { key_expr: value_expr for value in collection }
    或
    { key_expr: value_expr for value in collection if condition }
    """
    listdemo = ['Google', 'Runoob', 'Taobao']
    # key_expr: value_expr
    # { key_expr: value_expr for value in collection }
    # 字典，k,v
    dict_1 = {key: len(key) for key in listdemo}
    print(dict_1)
    # k=x*2,v=x**2
    dict_2 = {x * 2: x ** 2 for x in (1, 2, 4)}
    print(dict_2)


def tds_collection():
    """
    集合<class 'set'>推导式基本格式：
    { expression for item in Sequence }
    或
    { expression for item in Sequence if conditional }
    """
    setnew = {i ** 2 for i in (2, 4, 7)}
    print(type(setnew))
    print(setnew)

    set_1 = {x for x in 'abcdefghijhkjhsk' if x not in 'abc'}
    print(set_1)


def tds_tuple():
    """
    元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型，快速生成一个满足指定需求的元组。
    元组推导式基本格式：
    (expression for item in Sequence )
    或
    (expression for item in Sequence if conditional )
    """
    a = (x for x in ('a', 'b', 'c'))
    b = tuple(a)
    print(a)
    print(b)


if __name__ == '__main__':
    tds_tuple()
    # tds_collection()
    # tds_dict()
    # tds_list()
